﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Factory
{
    public partial class CompensarCheque : Form
    {
        int idCheque;

        public CompensarCheque()
        {
            InitializeComponent();
        }

        private void bindingSource1_CurrentChanged(object sender, EventArgs e)
        {

        }

        private void btnVoltar_Click(object sender, EventArgs e)
        {
            this.Close();
            MenuPrincipal menuprincipal = new MenuPrincipal();
            menuprincipal.Show();
        }

        private void CompensarCheque_Load(object sender, EventArgs e)
        {
            this.CarregarCheques();
        }

        IList<Cheque> lstCheque = new List<Cheque>();
        private void CarregarCheques()
        {
            try
            {
                ChequeDAO ChequeDAO = new ChequeDAO();
                lstCheque = ChequeDAO.ObterChequesNaoCompensados();
                var lista = from c in lstCheque
                            where c.status != 1
                            select new
                            {
                                Id = c.id,
                                Cliente = c.documentoCliente,
                                Emissor = c.documentoEmissor,
                                Status = c.status,
                                Valor = c.valor,
                                DataCompensar = c.dataCompensacao,
                                Banco = c.IdBanco,
                                DataSerasa = c.dataConsulta,
                                Serasa = c.ResultadoConsulta

                            };
                dataGridCheque.DataSource = lista.ToList();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        protected override bool ProcessCmdKey(ref Message message, Keys keys)
        {
            switch (keys)
            {
                case Keys.Escape:
                    //Process action here.
                    MenuPrincipal menu = new MenuPrincipal();
                    menu.Show();
                    this.Hide();
                    return false;
            }

            return false;
        }

        double valorcheque = 0;

        private void dataGridCheque_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                //verifico se o grid há linhas selecionadas
                if (dataGridCheque.CurrentRow != null)
                {
                    //capturo o codigo da grid
                    int cod = Convert.ToInt32(dataGridCheque.CurrentRow.Cells[0].Value);

                    //recupero o cheque que desejo alterar
                    var cheque = lstCheque.SingleOrDefault(x => x.id == cod);

                    txtCodigo.Text = Convert.ToString(cheque.id);
                    txtDocCliente.Text = cheque.documentoCliente;
                    valorcheque = cheque.valor;

                    idCheque = cheque.id;

                }
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            FactoryDAO factoryDAO = new FactoryDAO();
            ChequeDAO chequeDAO = new ChequeDAO();
            //Pegou o cheque
            Cheque cheque = chequeDAO.ObterChequePorID(idCheque);

            ClienteDAO clienteDAO = new ClienteDAO();

            //pegou o cliente do cheque
            Cliente cliente = clienteDAO.ObterClientesPorCpf(cheque.documentoCliente);

            //soma o valor do cheque ao limite atual do cliente
            double limite = cheque.valor + cliente.limiteAtual;

            FactoryE fac = factoryDAO.obterDadosFactory();
            double valorDaFactory = fac.valorAtual + cheque.valor;

            //atualiza o cliente
            int foi1 = clienteDAO.atualizarLimiteCreditoCliente(limite, cliente.cpf);


            int foi2 = factoryDAO.AtualizarDados(valorDaFactory);

            //atualiza cheque
            int atualizou = chequeDAO.atualizarCheque(idCheque);

            if (foi1 > 0 && foi2 > 0 && atualizou > 0)
            {
                MessageBox.Show("Cheque Compensado", "Sucesso!", MessageBoxButtons.OK);
            }

        }
    }
}
